#ifndef CAMERATRIGGERSETTINGS_H
#define CAMERATRIGGERSETTINGS_H

#include <QDialog>
#include "VisiyunDevice.h"

namespace Ui {
class CameraTriggerSettings;
}

/**
 * @brief 相机触发设置对话框类
 * 
 * 该类用于设置相机的触发参数，包括触发沿类型和触发通道
 */
class CameraTriggerSettings : public QDialog
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数
     * 
     * @param cameraManager 相机管理器指针，用于与相机设备通信
     * @param deviceId 设备ID，指定要设置的相机设备
     * @param parent 父窗口指针
     */
    explicit CameraTriggerSettings(VisiyunDevice *pCameraDevice, const QString &deviceId, QWidget *parent = nullptr);
    
    /**
     * @brief 析构函数
     */
    ~CameraTriggerSettings();

private slots:
    /**
     * @brief 触发沿改变时的槽函数
     * 
     * @param index 选择的触发沿索引
     */
    void onTriggerEdgeChanged(int index);
    
    /**
     * @brief 触发通道改变时的槽函数
     * 
     * @param value 选择的触发通道值
     */
    void onTriggerChannelChanged(int value);
    
    /**
     * @brief 关闭按钮点击槽函数
     */
    void onCloseButtonClicked();
    
    /**
     * @brief 确定按钮点击槽函数
     */
    void onOkButtonClicked();
    
    /**
     * @brief 取消按钮点击槽函数
     */
    void onCancelButtonClicked();
private:
    /**
     * @brief 设置信号与槽的连接
     */
    void setupConnections();
    
    /**
     * @brief 初始化UI组件
     */
    void initializeUI();
    
    /**
     * @brief 更新界面显示的设置
     */
    void updateSettings();
protected:
    /**
     * @brief 鼠标按下事件处理函数
     * 
     * @param event 鼠标事件对象
     */
    void mousePressEvent(QMouseEvent *event) override;
    
    /**
     * @brief 鼠标移动事件处理函数
     * 
     * @param event 鼠标事件对象
     */
    void mouseMoveEvent(QMouseEvent *event) override;
    
    /**
     * @brief 鼠标释放事件处理函数
     * 
     * @param event 鼠标事件对象
     */
    void mouseReleaseEvent(QMouseEvent *event) override;

private:
    Ui::CameraTriggerSettings *ui;       ///< UI对象指针
    QString m_deviceId;                  ///< 设备ID
    VisiyunDevice *m_pCameraDevcice;      ///< 相机设备器指针
    bool m_isDragging;                   ///< 是否正在拖动窗口
    QPoint m_dragStartPosition;          ///< 拖动开始位置
    
    // 临时保存用户修改的设置值
    int m_tempTriggerEdge;               ///< 临时保存的触发沿设置
    QString m_TempTriggerEdgeStytle;     ///< 临时保存触发沿样式
    int m_tempTriggerChannel;            ///< 临时保存的触发通道设置
    QString m_TempTriggerChannelStytle;  ///< 临时保存触发通道样式
};

#endif // CAMERATRIGGERSETTINGS_H
